/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rhdtp.demopf.control.admin;

import com.rhdtp.demopf.model.dao.ClienteDAO;
import com.rhdtp.demopf.model.dao.PeliculaDAO;
import com.rhdtp.demopf.model.dao.PrestamoDAO;
import com.rhdtp.demopf.model.dto.Cliente;
import com.rhdtp.demopf.model.dto.Pelicula;
import com.rhdtp.demopf.model.dto.Prestamo;
import com.rhdtp.demopf.model.dto.PrestamoId;
import com.rhdtp.demopf.security.UserSession;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import org.apache.log4j.Logger;
import org.primefaces.context.RequestContext;

/**
 *
 * @author rhdtp
 */
public class RegistroPrestamo {
    
    private static final Logger logger = Logger.getLogger(RegistroPrestamo.class);
    private Cliente cliente;
    private ClienteDAO clienteDAO;
    private PeliculaDAO peliculaDAO;
    private PrestamoDAO prestamoDAO;
    private UserSession userSession;
    private List<Cliente> clientesFilter;
    private List<Pelicula> peliculasFilter;
    private Cliente slcCliente;
    private Pelicula slcPelicula;
    private Date fechaActual;
    private Date fechaEntrega;
    private Prestamo prestamo;
    
    public RegistroPrestamo() {
    }
    
    public void initDataObjects() {
        GregorianCalendar cal = new GregorianCalendar();
        cal.setTime(fechaActual);
        cal.add(Calendar.DAY_OF_MONTH, 3);
        fechaEntrega = cal.getTime();
    }
    
    public void save() {
        if (slcCliente == null) {
            msgError("Error", "Debe seleccionar un Cliente.");
        }
        if (slcPelicula == null) {
            msgError("Error", "Debe seleccionar una Película");
        }
        if (slcCliente != null && slcPelicula != null) {
            prestamo.setCliente(slcCliente);
            prestamo.setPelicula(slcPelicula);
            prestamo.setFechaEntrega(fechaActual);
            prestamo.setFechaDevolucion(fechaEntrega);
            prestamo.getId().setIdPelicula(slcPelicula.getId());
            prestamo.getId().setId(1);
            prestamo.setEstatus(1);
            prestamoDAO.save(prestamo);
            msgInfo("Info.", "El prestamo: " + prestamo.getId().getId() + " ah sido registrado correctamente.");
        }
        this.initObjects();
    }
    
    public void resetForm() {
        initObjects();
        RequestContext.getCurrentInstance().reset("registro:formulario");
    }
    
    @PostConstruct
    public void initObjects() {
        fechaActual = new Date();
        prestamo = new Prestamo();
        prestamo.setCliente(new Cliente());
        prestamo.setPelicula(new Pelicula());
        prestamo.setId(new PrestamoId());
        slcCliente = null;
        slcPelicula = null;
    }
    
    public void msgInfo(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_INFO, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    
    public void msgError(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    
    public void msgWarning(String summary, String detail) {
        FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_WARN, summary, detail);
        FacesContext.getCurrentInstance().addMessage(null, message);
    }
    
    public List<Cliente> getClientes() {
        return clienteDAO.list();
    }
    
    public List<Pelicula> getPeliculas() {
        return peliculaDAO.list();
    }

    /**
     * @return the cliente
     */
    public Cliente getCliente() {
        return cliente;
    }

    /**
     * @param cliente the cliente to set
     */
    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    /**
     * @param clienteDAO the clienteDAO to set
     */
    public void setClienteDAO(ClienteDAO clienteDAO) {
        this.clienteDAO = clienteDAO;
    }
    
    public UserSession getUserSession() {
        return userSession;
    }
    
    public void setUserSession(UserSession userSession) {
        this.userSession = userSession;
    }
    
    public List<Cliente> getClientesFilter() {
        return clientesFilter;
    }
    
    public void setClientesFilter(List<Cliente> clientesFilter) {
        this.clientesFilter = clientesFilter;
    }
    
    public PeliculaDAO getPeliculaDAO() {
        return peliculaDAO;
    }
    
    public void setPeliculaDAO(PeliculaDAO peliculaDAO) {
        this.peliculaDAO = peliculaDAO;
    }
    
    public PrestamoDAO getPrestamoDAO() {
        return prestamoDAO;
    }
    
    public void setPrestamoDAO(PrestamoDAO prestamoDAO) {
        this.prestamoDAO = prestamoDAO;
    }
    
    public List<Pelicula> getPeliculasFilter() {
        return peliculasFilter;
    }
    
    public void setPeliculasFilter(List<Pelicula> peliculasFilter) {
        this.peliculasFilter = peliculasFilter;
    }
    
    public Cliente getSlcCliente() {
        return slcCliente;
    }
    
    public void setSlcCliente(Cliente slcCliente) {
        this.slcCliente = slcCliente;
    }
    
    public Pelicula getSlcPelicula() {
        return slcPelicula;
    }
    
    public void setSlcPelicula(Pelicula slcPelicula) {
        this.slcPelicula = slcPelicula;
    }
    
    public Date getFechaActual() {
        return fechaActual;
    }
    
    public void setFechaActual(Date fechaActual) {
        this.fechaActual = fechaActual;
    }
    
    public Date getFechaEntrega() {
        return fechaEntrega;
    }
    
    public void setFechaEntrega(Date fechaEntrega) {
        this.fechaEntrega = fechaEntrega;
    }
}
